﻿using UnityEngine;

/// <summary>
/// 物理环境检测组件
/// 负责处理地面、墙壁等物理状态的检测
/// </summary>
public class PhysicsCheck : MonoBehaviour
{
    #region 地面检测参数

    [Header("地面检测")]
    [Tooltip("地面检测点（应放置在角色底部）")]
    [SerializeField] private Transform groundCheck;

    [Tooltip("检测半径（匹配角色碰撞体大小）")]
    [SerializeField] private float groundCheckRadius = 0.1f;

    [Tooltip("地面层级（需在Unity中设置对应层级）")]
    [SerializeField] private LayerMask groundLayer;

    // 当前是否接触地面（只读属性）
    public bool IsGrounded { get; private set; }

    #endregion

    #region 墙壁检测参数

    [Header("墙壁检测")]
    [Tooltip("墙壁检测点（应放置在角色侧面）")]
    [SerializeField] private Transform wallCheck;

    [Tooltip("检测半径（根据角色宽度调整）")]
    [SerializeField] private float wallCheckRadius = 0.1f;

    [Tooltip("墙壁层级（需与地面层不同）")]
    [SerializeField] private LayerMask wallLayer;

    // 当前是否接触墙壁（只读属性）
    public bool IsOnWall { get; private set; }

    #endregion

    /// <summary>
    /// 每帧物理更新时检测状态
    /// </summary>
    private void FixedUpdate()
    {
        CheckGround();
        CheckWall();
    }

    #region 检测逻辑

    /// <summary>
    /// 地面检测（圆形范围检测）
    /// </summary>
    private void CheckGround()
    {
        IsGrounded = Physics2D.OverlapCircle(
            groundCheck.position,
            groundCheckRadius,
            groundLayer
        );
    }

    /// <summary>
    /// 墙壁检测（圆形范围检测）
    /// </summary>
    private void CheckWall()
    {
        IsOnWall = Physics2D.OverlapCircle(
            wallCheck.position,
            wallCheckRadius,
            wallLayer
        );
    }

    #endregion

    #region 调试可视化

    /// <summary>
    /// 在场景视图中绘制检测范围
    /// </summary>
    private void OnDrawGizmosSelected()
    {
        // 地面检测范围（绿色）
        Gizmos.color = Color.green;
        Gizmos.DrawWireSphere(groundCheck.position, groundCheckRadius);

        // 墙壁检测范围（蓝色）
        Gizmos.color = Color.blue;
        Gizmos.DrawWireSphere(wallCheck.position, wallCheckRadius);
    }

    #endregion
}